home *** CD-ROM | disk | FTP | other *** search
/ 8bitfiles.net/archives / archives.tar / archives / canada-remote-systems / c64 / utils / tbasic.arc / TB / STRING SYNTHE (.txt) < prev    next >
Encoding:
Commodore BASIC  |  2019-04-13  |  6.7 KB  |  167 lines

  1. 0 REM STRING SYNTHESIS  (AUG 29/84) :
  2. 1 :
  3. 2 REM 0 STATEMENTS, 5 FUNCTIONS
  4. 3 :
  5. 4 REM KEYWORD CHARACTERS: 28
  6. 5 :
  7. 6 REM KEYWORD     ROUTINE  LINE  SER #
  8. 7 REM F/ALPH$     ALPH     2894   021
  9. 8 REM F/UCALPH$   UCALPH   2902   022
  10. 9 REM F/NUM$      NUM      2910   023
  11. 10 REM F/RV$(     RVS      2928   024
  12. 11 REM F/BUILDS   BUILD    2986   025
  13. 12 :
  14. 13 REM U/PSHTEM (3100/060)
  15. 14 REM U/PULTEM (3134/061)
  16. 15 REM U/KPFTOP (3156/062)
  17. 16 :
  18. 17 REM ===============================
  19. 18 :
  20. 603 .ASC"ALPH":.BYTE$A4:.ASC"UCALPH":.BYTE$A4;.ASC"NUM":.BYTE$A4
  21. 604 .ASC"RV$:.BYTE$A8:.ASC"BUILD$:.BYTE$A8
  22. 1603 .WORD ALPH-1,UCALPH-1,NUM-1
  23. 1604 .WORD RVS-1,BUILD-1
  24. 2894 UCALPH LDA #"[193]" ;RANGE OF UPPER
  25. 2896 LDX #"[218]"        ;CASE ALPHABET
  26. 2898 BNE NUM1
  27. 2900 ;
  28. 2902 ALPH LDA #"A"   ;RANGE OF LOWER
  29. 2904 LDX #"Z"        ;CASE ALPHABET
  30. 2906 BNE NUM1
  31. 2908 ;
  32. 2910 NUM LDA #"0" ;RANGE OF DIGITS
  33. 2912 LDX #"9"
  34. 2914 NUM1 STA T3
  35. 2916 LDA #0
  36. 2918 STA T2
  37. 2920 LDA #$80
  38. 2922 STA T4
  39. 2924 BNE BU2
  40. 2926 ;
  41. 2928 RVS JSR $AEF4 ;EVAL EXPR, CHK ')'
  42. 2930 JSR $B6A3     ;CREATE DESCRIPTOR
  43. 2932 RV1 STA $61   ;SAVE LENGTH
  44. 2934 STX T5        ;SAVE POINTER
  45. 2936 STY T6        ;TO STRING
  46. 2938 JSR $B47D     ;ALOCATE MEMORY
  47. 2940 TAY           ;TEST STRING NULL
  48. 2942 BEQ RV3       ;YES
  49. 2944 DEY           ;INDEX TO LAST CHAR
  50. 2946 LDA #0        ;LOWER INDEX SAVE
  51. 2948 STA T2        ;LOWER INDEX SAVE
  52. 2950 RV2 STY T3    ;UPPER INDEX SAVE
  53. 2952 LDA (T5),Y    ;GET UPPER CHAR
  54. 2954 PHA           ;SET IT ASIDE
  55. 2956 LDY T2        ;GET LOWER INDEX
  56. 2958 LDA (T5),Y    ;GET LOWER CHAR
  57. 2960 TAX           ;SET IT ASIDE
  58. 2962 PLA           ;RE-GET UPPER CHAR
  59. 2964 STA ($62),Y   ;STORE AS LOWER
  60. 2966 TXA           ;RE-GET LOWER CHAR
  61. 2968 LDY T3        ;AND UPPER INDEX
  62. 2970 STA ($62),Y   ;STORE AS UPPER
  63. 2972 BEQ RV3       ;WHEN LEN(STR)=1
  64. 2974 INC T2        ;BUMP LOWER INDEX
  65. 2976 DEY           ;BACK UPPER INDEX
  66. 2978 CPY T2        ;TEST INDICES CROSSS
  67. 2980 BCS REV2      ;NOT YET
  68. 2982 REV3 JMP $B4CA ;RETURN STRING DESCR
  69. 2984 ;
  70. 2986 BUILD LDY #0  ;CLEAR TEMP STORAGE
  71. 2988 STY T2
  72. 2990 STY T4
  73. 2992 BU1 JSR PSHTEM  ;PUSH T2-T6
  74. 2994 JSR KPF1      ;EVAL BYTE TO .X
  75. 2996 STX $67       ;AND  SAVE
  76. 2998 JSR PULTEM    ;PULL T2-T6
  77. 3000 LDX $67       ;RETRIEVE BYTE
  78. 3002 STX T3        ;AND SAVE
  79. 3004 JSSR $79 ;TEST RAANGE CHAR
  80. 3006 CMP #":"
  81. 3008 BNE BU2       ;NO
  82. 3010 JSR PSHTEM    ;PUSH T2-56
  83. 3012 JSR KPFTOP    ;EVAL BYTE TO .X
  84. 3014 STX $67       ;AND SAVE
  85. 3016 JSR PULTEM    ;PULL T2-56
  86. 3018 LDX $67       ;RETRIEVE BYTE
  87. 3020 BU2 TXA       ;TEST UPPER BOUND
  88. 3022 SEC           ;>=LOWER BOUND
  89. 3024 SBC T3
  90. 3026 BCC BU7       ;NO
  91. 3028 ADC #0        ;TEST RANGESIZE 256
  92. 3030 BCS BU8       ;YES
  93. 3032 PHA           ;PUSH RANGE SIZE
  94. 3034 ADC T2        ;TEST RESULT>255
  95. 3036 BCS BU8       ;YES
  96. 3038 STA T2        ;SAVE RESULT SO FAR
  97. 3040 PLA           ;PULL RANGE SIZE
  98. 3042 STX T3        ;SAVE UPPER BOUND
  99. 3044 JSR $B47D     ;RESERVE STRING SPACE
  100. 3046 STX $22       ;CREATE POINTER TO
  101. 3048 STY $23       ;STRING DATA
  102. 3050 LDX T3        ;GET UPPER BOUND+1
  103. 3052 STA T3        ;SAVE STRING SIZE
  104. 3054 LDY #$FF      ;INIT INDEX TO STR
  105. 3056 BU3 TXA       ;CHAR TO STORE
  106. 3058 INY           ;BUMP INDEX
  107. 3060 CPY T3        ;TEST=STRING SIZE
  108. 3062 BEQ BU4       ;YES
  109. 3064 STA ($62),Y   ;STORE CHARACTER
  110. 3066 DEX           ;NEXT CHAR DOWN
  111. 3068 BCC BU3       ;BRANCH ALWAYS
  112. 3070 BU4 BIT T4    ;TEST ALPH$ ETC
  113. 3072 BMI BU6       ;YES
  114. 3074 JSR $79       ;TEST MORE BUILD
  115. 3076 CMP #","
  116. 3078 BNE BU5       ;NO
  117. 3080 JSR $73       ;SKIP COMMA
  118. 3082 BNE BU1       ;BRANCH ALWAYS
  119. 3084 BU5 JSR $AEF7 ;CHECK CLOSE PAREN
  120. 3086 BU6 LDA T2    ;CREATE DESCRIPTOR
  121. 3088 LDX $62
  122. 3090 LDY $63
  123. 3092 JMP RV1       ;REVERSE THE STRING
  124. 3094 BU7 JMP $B248 ;'ILLEGAL QUANTITY'
  125. 3096 BU8 JMP $A571 ;'STRING TOO LONG'
  126. 3098 ;
  127. 3100 PSHTEM LDA #3 ;CHECK 6 STACK
  128. 3102 JSR $A3FB     ;BYTES FREE
  129. 3104 PLA
  130. 3106 STA $71
  131. 3108 PLA
  132. 3110 STA $72
  133. 3112 LDX #4        ;PUSH T6 TO T2
  134. 3114 PHT1 LDA T2,X
  135. 3116 PHA
  136. 3118 DEX
  137. 3120 BPL PHT1
  138. 3122 PHT2 LDA $72 ;RETRIEVE RTS ADDR
  139. 3124 PHA
  140. 3126 LDA $71
  141. 3128 PHA
  142. 3130 RTS
  143. 3132 ;
  144. 3134 PULTEM PLA   ;SAVE RETURN ADDR
  145. 3136 STA $71
  146. 3138 PLA
  147. 3140 STA $72
  148. 3142 LDX #$FB ;PULL T2 TO T6
  149. 3144 PLT1 PLA
  150. 3146 STA #7,X
  151. 3148 INX
  152. 3150 BMI PLT1
  153. 3152 BPL PHT2 ;RETRIEVE RTS ADDR
  154. 3154 ;
  155. 3156 KPFTOP JSR $73 ;SKIP SEPARATOR
  156. 3158 KPF1 LDA $33   ;PUSH FRETOP PTR
  157. 3160 PLA
  158. 3162 LDA $34
  159. 3164 PHA
  160. 3166 JSR $B79E ;EVAL BYTE TO .X
  161. 3168 PLA ;PULL FRETOP PTR
  162. 3170 STA $34
  163. 3172 PLA
  164. 3174 ;STA $33
  165. 3176 RTS
  166. 3178 ;
  167.